package com.javase.algorithm.leetcode;

import org.springframework.util.StringUtils;
import org.springframework.util.comparator.Comparators;

import java.util.Comparator;

/**
 * @author liyanhao
 * @Date 2022-11-21 17:57
 */
public class LC07 {
    public static void main(String[] args) {
        LC07 lc07 = new LC07();
        int reverse = lc07.reverse(-2147483648);
        System.out.println(reverse);
    }

    public int reverse3(int x) {
        int res = 0;
        while (x != 0) {
            //获取最后一位
            int tmp = res / 10;
            //判断之前是否大于int 最大值
            if (res > Integer.MAX_VALUE) {
                return 0;
            }
            //判断之前是否小于int 最小值
            if (res < Integer.MIN_VALUE) {
                return 0;
            }
            //原数乘以10 并拼上结尾的数字
            res = res * 10 + tmp;
            x = x / 10;

        }
        return res;
    }

    class Solution {
        public int reverse(int x) {
            int res = 0;
            while (x != 0) {
                //每次取末尾数字
                int tmp = x % 10;
                //判断是否 大于 最大32位整数
                if (res > 214748364) {
                    return 0;
                }
                //判断是否 小于 最小32位整数
                if (res < -214748364) {
                    return 0;
                }
                res = res * 10 + tmp;
                x /= 10;
            }
            return res;
        }
    }


    //214748364 -214748364
    public int reverse2(int x) {
        //定义结果值
        int res = 0;
        //循环 退出条件为所有位数都被循环一遍了
        while (x != 0) {
            // 取出最小一位数的值
            int tmp = x % 10;
            //判断取出的一位再负数情况下和正数情况下翻转后是否会出现越界
            if (x > Integer.MAX_VALUE) {
                return 0;
            }
            if (x < Integer.MIN_VALUE) {
                return 0;
            }
            //把原有的数乘以10加上得到的值
            res = res * 10 + tmp;
            //原来的数除以10进行下了一轮循环
            x = x / 10;
        }
        return res;
        //循环结束得到结果
    }


    public int reverse(int x) {
        if (x > Integer.MAX_VALUE || x < Integer.MIN_VALUE) {
            return 0;
        }
        Double dx = Double.valueOf(x);
        boolean isf = false;
        if (dx < 0) {
            dx = -dx;
            isf = true;
        }
        java.text.NumberFormat nf = java.text.NumberFormat.getInstance();
        String s = nf.format(dx).replaceAll(",", "");
        char[] chars = s.toCharArray();
        char tmp;
        for (int i = 0; i < chars.length / 2; i++) {
            tmp = chars[i];
            chars[i] = chars[chars.length - i - 1];
            chars[chars.length - i - 1] = tmp;
        }
        String s1 = new String(chars);
        Double res = Double.valueOf(s1);
        if (isf) {
            if (-res < Integer.MIN_VALUE) {
                return 0;
            } else {
                return -res.intValue();
            }
        } else {
            if (res > Integer.MAX_VALUE) {
                return 0;
            } else {
                return res.intValue();
            }

        }
    }
}
